package com.cicigodd.brick.plug.upload.api;


import java.io.BufferedInputStream;
import java.io.InputStream;

/**
 * 文件操作api
 *
 * @author cicigodd
 * @date 2022/09/23 08:42:00
 */
public interface FileOperatorApi {


    /**
     * 判断是否存在文件
     *
     * @param bucketName 桶名称
     * @param key        唯一标示id，例如a.txt, doc/a.txt
     * @return true-存在文件，false-不存在文件
     */
    boolean isExistingFile(String bucketName, String key);

    /**
     * 存储文件（存放到指定的bucket里边）
     *
     * @param bucketName  桶名称
     * @param key         唯一标示id，例如a.txt, doc/a.txt
     * @param inputStream 文件流
     */
    void storageFile(String bucketName, String key, InputStream inputStream);

    /**
     * 获取某个bucket下的文件字节
     *
     * @param bucketName 桶名称
     * @param key        唯一标示id，例如a.txt, doc/a.txt
     * @return byte[] 字节数组为文件的字节数组
     */
    byte[] getFileBytes(String bucketName, String key);

    /**
     * 获取某个bucket下的文件流
     *
     * @param bucketName
     * @param key
     * @return
     */
    BufferedInputStream getBufferedInputStream(String bucketName, String key);

    /**
     * 获取文件的下载地址，生成外网地址
     *
     * @param bucketName 文件桶
     * @param key        文件唯一标识
     * @return 外部系统可以直接访问的url
     */
    String getFileUrl(String bucketName, String key);


    /**
     * 删除文件
     *
     * @param bucketName 文件桶
     * @param key        文件唯一标识
     */
    void deleteFile(String bucketName, String key);
    void deleteFile(String url);

}
